import 'dart:math';

import 'package:flutter/services.dart';

class DoubleInputFormatter extends TextInputFormatter {
  static final RegExp _floatFormatter = RegExp(r'^(\d+)?\.?\d*$');
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    String newText = newValue.text;
    if (_floatFormatter.hasMatch(newText)) {
      return newValue;
    } else {
      // 如果输入不合法（比如两个小数点），则保持原样不变或做适当处理
      // 这里选择删除非法字符，仅保留合法的数字和一个小数点
      String filtered = newText.split('').where(_floatFormatter.hasMatch).join('');
      int selectionDelta = newText.length - filtered.length;
      return TextEditingValue(
        text: filtered,
        selection: TextSelection.collapsed(
            offset: max(0, newValue.selection.end - selectionDelta)),
      );
    }
  }
}
